Mobile devices, including for example mobile phones (so-called “smart” phones), global positioning system (GPS) devices, laptop/netbook/tablet computers, to name only a few examples, provide diverse remote data capabilities. Many mobile applications are based on so-called “cloud” services, such as location services, messaging services, and so forth. Currently many cloud services are based on statically prepared information, and do not offer real-time analytics of dynamic events. Cloud services that do offer computation capabilities fail to provide fast data access and data transfer ability.
The current technology has several limitations in both expressive power and efficiency. Existing database services offer scalar, aggregate and table functions (table functions are also known as table-valued functions, or “TVF”), where the input of a scalar or table function can only be bound to the attribute values of a single tuple (a “tuple” is an ordered list of elements). An aggregate function is actually implemented as incremental per-tuple manipulations. These computations lack formal support for tuple-set input.
However, many computations rely on a set of tuples, and therefore have to be input one tuple at a time. An example is a graph having multiple arcs with each arc represented by an individual tuple. The graph is represented by a set of tuples, and therefore a minimal spanning tree (MST) computation can only be computed upon receiving the entire tuple set. Another example is a document having multiple sentences with each sentence represented by an individual tuple. Of course there are many more examples of computations that cannot be performed until after all tuples in the tuple set are received.
Further, the computation may need to be executed by an external engine that is outside of the database query engine, e.g., through procedural calls or by copying data back and forth. Per-tuple procedural calls and data copying by an external engine incurs significant performance penalties.